
//data为table对应的array数据，compareIndex（一般=0），比较列，相邻行compareIndex值相同的
// 就有可能需要合并：
//   - 如果指定了要合并的列mergedColumn，则直接记录该列需合并
//   - 否则，没有指定需要合并的列的，则比较相邻行该列的数据相等的，则合并
//   - 暂不用
//需要合并的数据记录在mergedObject中：{row,column,rosspan}
/**
 *
 * @param data table对应的list数据
 * @param compareIndex 比较列号
 * @param colsNeedToMerge 需要合并的列
 * @param mergedArray
 */
 export function getMergedData(data, compareIndex, colsNeedToMerge,mergedArray) {
  let nextRowNum = 0
  let mergedColumns=[];
  // this.mergedColumns = []
  // this.mergedArray = []
  //按行号循环数据比较
  for (let currentRowNum = 0; currentRowNum < data.length; currentRowNum++) {
    //每一行的每一列
    let element = data[currentRowNum]
    nextRowNum = currentRowNum < (data.length - 1) ? currentRowNum + 1 : -1
    if (nextRowNum > 0) {
      let nextElement = data[nextRowNum]
      if (element[compareIndex] == nextElement[compareIndex]) {
        //当前行和下一行的比较列字段相等，需要比较每一列，确定是否合并
        getMergedColumns(currentRowNum, element, nextElement, compareIndex,colsNeedToMerge,mergedArray,mergedColumns)
      } else {
        //比较列不相等
        mergedFor(mergedArray,mergedColumns)
      }
    }
  }
  mergedFor(mergedArray,mergedColumns)
}

/**
 *
 * @param mergedArray
 * @param mergedColumns
 */
export function mergedFor(mergedArray,mergedColumns) {
  for (let i = 0; i < mergedColumns.length; i++) {
    if (mergedColumns[i]) {
      mergedArray.push(mergedColumns[i])
    }
    mergedColumns[i] = undefined
  }
}

/**
 *
 * @param rowNum
 * @param currentRow
 * @param nextRow
 * @param fromIndex
 * @param colsNeedToMerge
 * @param mergedArray
 * @param mergedColumns
 */
export function getMergedColumns(rowNum, currentRow, nextRow, fromIndex,colsNeedToMerge,mergedArray,mergedColumns) {
  let mergedObj = {}
  for (let col = fromIndex; col < currentRow.length; col++) {
    mergedObj = {}
    if (colsNeedToMerge && colsNeedToMerge.indexOf(col)==-1){
      continue
    }
    if (currentRow[col] == nextRow[col]) {
      if (mergedColumns[col]) {
        mergedObj = mergedColumns[col]
      } else {
        mergedObj.span = 1
        mergedObj.row = rowNum
        mergedObj.col = col
        mergedColumns[col] = mergedObj
      }
      mergedObj.span += 1
    } else {
      if (mergedColumns[col] && mergedColumns[col].span > 1) {
        mergedArray.push(mergedColumns[col])
      }
      mergedColumns[col] = undefined
      break
    }
  }
}
